【问题标题】:C# loop through class list but only once for multiple names [duplicate]C#循环遍历类列表,但对于多个名称只有一次[重复]
【发布时间】:2018-02-05 05:59:40
【问题描述】:

我认为它可以用 linq 完成,但我在 google 上找不到它,因为我确实知道如何查找这个问题。

我有一个这样的班级列表:

Public class Data
{
    public string name;
    public int someData;
}
public List<Data> allData = new List<Data>();

该列表可能包含大约 32 个项目,其中生成了 somedata,但名称取自 someData 所属的对象。 但是可能有多个同名的输入,这在以后使用 int 数组的 1 个名称时更容易使用。

我正在寻找的是一种方法来处理 intire allData 列表,但每个名称只有一次,所以“bob”可能在那里出现 8 次,但我想通过它查看并且只访问 bob 一次。

有办法做到这一点,还是我需要重新考虑我的列表,并使用 int 数组?

反馈很棒!

【问题讨论】:

  • "浏览整个allData 列表,但每个名字只能访问一次,所以“bob”可能会出现 8 次,但我想查看它并且只访问 bob 一次。 " - 这没有意义。如果"bob" 在列表中 8 次并且您通过列表,则必须访问 "bob" 8 次。

标签: c# list linq class


【解决方案1】:

为什么不使用字典作为名称和整数数组或列表的键:

var allData = new Dictionary<string, List<int>>();
allData["Bob"] = new List<int>() { 1 , 2 , 3 };
var allInts = allData.Values.SelectMany(m => m); // IEnumerable<int>
var intsByName = allData["nameToSelect"]; // List<int>
var availableNames = allData.Keys;

您提出的数据结构也没有任何危害:

var allInts = allData
    .Select(m => m.someData); // IEnumerable<int>
var intsByName = allData
    .Where(m => m.name.Equals("nameToSelect"))
    .Select(m => m.someData); // IEnumerable<int>
var availableNames = allData.Select(m => m.name).Distinct();

【讨论】:

  • 不知道是不是“bob”,名字基本随意
  • 想一想如果您需要使用字符串键查找所有整数,字典会更容易组织、访问和扩展列表。
  • 好吧,提供更多信息,我知道列表会有多满,也不知道里面会有什么项目,所以我不知道其中的名称和 int 数据,稍后我需要访问所有组合的 int 数据,有时我只需要获取与名称匹配的 int 数据
  • 我为您建议的每个场景都提供了示例。 LINQ 中的SelectMany 将为您提供所有组合的 int 数据。然后你可以直接使用字典结构访问匹配的名称。
  • 可以,但我不知道 nameToSelect,我不知道里面有什么名字
猜你喜欢
  • 1970-01-01
  • 2018-09-03
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2019-06-14
  • 1970-01-01
相关资源
最近更新 更多