如何在 Protobuf 中搜索重复字段?

How to search in Protobuf repeated fields?

这是我第一次使用 protobuf,我想知道是否有任何方法可以访问 Repeated Field 中的某个项目。

我创建了一个方法,它将遍历所有项目,检查项目字段,然后 return 它(我不能 return 指向它的指针 :( )。

public Appearance findItem(int itemID) {
  foreach (Appearance item in appearances.Object) {
    if (item.Id == itemID) {
      return item;
    }
  }
  return null;
}

好像没有find方法可以使用一些lambda表达式

还有其他方法可以实现吗?如果我能有指向该项目的指针而不是它的副本,那就太完美了,所以如果我改变它,我可以直接写完整的重复字段。

It would be perfect if i could hav pointer to the item, not a copy of it, so if i change it, i can write the complete repeated field directly.

您不能那样做,但您可以 return 元素的 index 代替。鉴于重复字段实现 IEnumerable<T>,您应该能够足够轻松地使用 LINQ。例如:

// index is an "int?" with a value of null if no items matched the query
var index = repeatedField
    // You could use tuples here if you're using C# 7. That would be more efficient.
    .Select((value, index) => new { value, (int?) index })
    // This is whatever condition you want
    .Where(pair => pair.value.SomeField == "foo")
    .Select(pair => pair.index)
    .FirstOrDefault();