【问题标题】:Getting highest available number in a List<string>在 List<string> 中获取最高可用数字
【发布时间】:2012-01-07 10:52:50
【问题描述】:

我在List&lt;string&gt; 中有以下字符串

vs0, vs1, vs2, vs3, vs4, vs5, ... vs(n)

在我的列表中,它们没有排序并且是随机的。我想得到其中具有最高int 的字符串。然后将该字符串中的数字放入 int var。

最好和最快的方法是什么?

【问题讨论】:

  • 你需要关注的最大 n 集合是多少?
  • 它将小于 65535 :P 但它总是随机的,也许有一次我在列表中只得到 1 个成员或 65535 字符串!
  • 那么 Yuriy 的回答应该足以满足您的需要。

标签: c# string linq list


【解决方案1】:
var max = myList.OrderByDescending(v => int.Parse(v.Substring(2))).First();

或者如果你需要最高的int

var max = myList.Select(v => int.Parse(v.Substring(2))).Max();

【讨论】:

  • 非常干净的 LINQ,但它通常永远不是最快的(就性能而言)做事的方式。
  • 不是不必要的排序并增加了复杂性..他只需要遍历列表一次吗?
  • @Baz1nga 这不是一个完整的排序,只是足以获得最高价值。我个人会选择 MoreLinq 的 MaxBy,但这只是更短。
  • OrderBy 总是做一个完整的排序并且是 O(nlogn);最大值为 O(n)。最短的是myList.Max(v =&gt; int.Parse(v.Substring(2)))
【解决方案2】:
 var result = List.Max(p => int.Parse(p.Substring(2)));

【讨论】:

    【解决方案3】:

    使用 LINQ 怎么样:

    List<string> strings = ...
    int max = strings.Max(item => int.Parse(item.Substring(2)));
    

    【讨论】:

      【解决方案4】:
      var max = yourList.Select(s => int.Parse(s.Substring(2)).Max();
      

      【讨论】:

      • 在做 Max 之前不需要 Select,因为 Max 接受一个转换器。
      【解决方案5】:

      l.Select(s =&gt; int.Parse(s.Substring(2))).Max()

      如果您打算多次这样做,您可能需要创建一个单独的 ints 列表

      【讨论】:

      • SubString 是一个错字,在做 Max 之前不需要 Select,因为 Max 接受一个转换器。
      【解决方案6】:

      也许只是l.Select(Convert.ToInt32).Max()


      根据 Jim 的建议,需要去掉 2 个主角:

      l.Max(s => Convert.ToInt32(s.Substring(2)))
      

      (但这一个实际上与其他答案相同)。

      【讨论】:

      • 这并没有去掉“vs”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 1970-01-01
      相关资源
      最近更新 更多