【问题标题】:get index List<object> that contain a value, C#, Linq [duplicate]获取包含值的索引列表<object>,C#,Linq [重复]
【发布时间】:2020-09-10 19:44:01
【问题描述】:

我从 C# Linq 开始。我想执行这个查询。

我有一个对象列表,每个对象有几个值,其中一个是“文本”。我想寻找哪个对象有一个特定的文本他们得到列表对象的索引。

获取索引未完成

var List = GetListObject();
var index = unitList.Select(x => x.Text.ToString().Contains("Text"));

【问题讨论】:

  • 如果你想要性能,不要使用 Linq。在您的情况下,请按照答案中的建议使用常规的 for 循环。
  • 我完全同意 - 我可以始终比 Linq 更快地编写代码。但是,有一些优点,即可读性(如果用于短链)和工作面试。看起来 Andres 正在学习 Linq——这项技能可以在以后找到一份不错的工作。

标签: c# linq


【解决方案1】:

检查一下

myLİst.Select((v, i) => new {Text = v, Index = i})
    .First(x=> x.Text.ToString().Contains("Text")).Index;

【讨论】:

    【解决方案2】:

    如果要获取index,我建议好老for循环:

      int index = -1;
    
      for (int i = 0; i < List.Count; ++i)
        if (List[i].Text.Contains("Text")) {
          index = i;
    
          break;
        }
    

    如果是 Linq

      int index = List
        .Select((v, i) => new {v, i})
        .FirstOrDefault(pair => pair.v.Text.Contains("Text"))
       ?.i ?? -1;  
    

    在这两种情况下,如果没有找到带有Text == "Text" 的项目,我们都会得到-1

    【讨论】:

      【解决方案3】:

      您可以使用 Enumerable.Range(int, int)。

      例如:var zeroIndexes = Enumerable.Range(0, list.Count - 1).Where(x =&gt; list[x] == 0).ToArray() 将为您提供一个包含所有值为零的 list 索引的数组。

      所以具体到你的问题,你可以这样做:

      int index = Enumerable.Range(0, unitList.Count - 1).Where(x => unitList[x].Text.ToString().Contains("Text")).FirstOrDefault();
      

      这将为您提供第一个索引,如果未找到,则为 0。

      【讨论】:

        猜你喜欢
        • 2020-10-07
        • 1970-01-01
        • 2014-01-22
        • 2019-09-24
        • 2017-11-19
        • 2018-01-07
        • 1970-01-01
        • 2011-09-24
        • 2013-04-04
        相关资源
        最近更新 更多