需要从集合中获取值

本文关键字:获取 集合 | 更新日期: 2023-09-27 18:04:01

我有一个类型为List<Detail>的变量

public class Detail {
   public string L { get; set; }
   public string R { get; set; }
}

我还有一个字符串的值,它与Detail.L中的值相匹配。

是否有一种简单的方法可以让我获得Detail的值。R和这个匹配吗?

需要从集合中获取值

当然,使用LINQ to Objects(假设你使用的是。net 3.5或更高版本):

string searchText = "the string to look for";
var matchingR = details.First(d => d.L == searchText).R;

显然会找到第一个匹配。如果您想获得所有匹配,您可以这样做:

var matchingRs = details.Where(d => d.L == searchText)
                        .Select(d => d.R);

像这样获取所有匹配的左:

IEnumerable<string> matchRightsToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).Select(l => l.right);
}

或对于第一个/唯一的匹配

string matchRightToLeft(List<Detail> list, string left)
{
    return list.Where(l => l.left == left).FirstOrDefault(l => l.right);
}

如果L是唯一的,在您的情况下,最好在这里使用Dictionary而不是List。

var myList = new Dictionary<string,string>();

然后使用L作为键,R作为字典的值。

通过调用myList.Add(newL,newR);

添加条目

然后通过以下方式获取一个条目:

string myR = myList[myL];
   string valueForL = "abc";
   List<Detail> details = new List<Detail>();
   string valueForR = (from d in details where d.L == valueForL select d.R).FirstOrDefault();

看看这个关于实现IEquatable接口的线程。我想你会在那里找到你需要的一切。

如何:

IEnumerable<string> allR = Details.Where(d => Equals(d.L, otherString)).Select(d => d.R);

for循环是最基本的方法。

否则使用Linq:

var lString = SearchValue;
DetailList.Where(o => o.R == lString) //This will give you a list of all the Detail object where R == lString.

你可以试试LINQ to Objects:

string r = (from d in list where d.L.Equals(...) select d.R).FirstOrDefault();