Необходимо зеркально отразить взгляды при работе с масштабируемым хранилищем данных как GAE, чтобы сделать вычисления впереди. В этом случае это означает, что необходимо сохранить счетчики для каждого baz
и увеличить их каждый раз, когда Вы добавляете новое bar
, вместо того, чтобы рассчитать во время дисплея.
class CategoryCounter(db.Model):
category = db.StringProperty()
count = db.IntegerProperty(default=0)
тогда при создании объекта Панели, увеличьте счетчик
def createNewBar(category_name):
bar = Bar(...,baz=category_name)
counter = CategoryCounter.filter('category =',category_name).get()
if not counter:
counter = CategoryCounter(category=category_name)
else:
counter.count += 1
bar.put()
counter.put()
db.run_in_transaction(createNewBar,'asdf')
теперь, у Вас есть простой способ получить счет для любой определенной категории
CategoryCounter.filter('category =',category_name).get().count
str = str.Substring(2,str.Length-4)
Конечно, вы должны проверить, что строка содержит более 4 символов, прежде чем делать это. Также в вашем случае кажется, что \ n - это один символ новой строки. Если все, что вы хотите сделать, это удалить начальные и конечные пробелы, вам следует использовать
str.Trim()
, как предложил Чарльз
// Test string
var str = "\nTESTSTRING\n";
// Number of characters to remove on each end
var n = 2;
// Slimmed string
string slimmed;
if (str.Length > n * 2)
slimmed = str.Substring(n, str.Length - (n * 2));
else
slimmed = string.Empty;
// slimmed = "ESTSTRIN"
myString = myString.SubString(2, myString.Length - 4);
Papuccino1,
Если вы создадите такой метод расширения, как этот:
public static class StringEnumerator {
public static IEnumerable<String> GetLines(this String source) {
String line = String.Empty;
StringReader stringReader = new StringReader(source);
while ((line = stringReader.ReadLine()) != null) {
if (!String.IsNullOrEmpty(line)) {
yield return line;
}
}
}
}
ваш код будет упрощен и станет более безопасным (вне зависимости от индекса опасности):
class Program {
static void Main(string[] args) {
String someText = "\nTESTSTRING\n";
String firstLine = someText.GetLines().First();
}
}
Надеюсь, это поможет,
Рикардо Ласерда Каштелу Бранко