我需要一个配对列表,带有“string”,“string”。
试过:
Dictionary<string, string> Categories= new Dictionary<string, string>();
但不能添加“700”,“2”和“700”,“3”。我需要一个配对,我可以随时添加所有东西。像一个可以包含N Vector(字符串,字符串)的Vector。我需要哪种结构?很快,因为我需要在LINQ中对它们进行比较,之后:
myStructs = from MyObject s in MyObjects
join c in Categories on s.IDCategory.UniqueID equals c.Key
join d in Categories on s.Stars equals d.Value
select s;
答案 0 :(得分:9)
尝试List<Tuple<string, string>>
,或者为了提高可读性,只需创建一个新类型。
如果你需要它在linq中有意义,你可以将元组转换为匿名类型(在这里使用let
)给类型一些合理的属性名称:
var items = new List<Tuple<string, string>>
{
new Tuple<string, string>("Adam", "1"),
new Tuple<string, string>("Adam", "2")
};
var names = from i in items
let person = new { Name = i.Item1, Number = i.Item2 }
select person.Name;
在linq查询期间使其更具可读性。
类型被大量使用,我建议使用更好的属性名称创建自己的类型,以便在Servy's answer中更清晰。从长远来看,Tuple<string, int, bool>
比要少得多:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public bool LikesCake { get; set; }
}
元组相等性基于所有属性与相同类型元组的实例的相等性。例如,new Tuple("Adam", "1").Equals(new Tuple("Adam", "1"))
将为真。
列表也不会停止重复的项目。如果您需要在所有属性中强制实施唯一性,那么HashSet<Tuple<string, string>>
就是您所需要的。
答案 1 :(得分:4)
只需创建自己的。
public class Pair
{
public string First {get;set;}
public string Second {get;set;}
}
然后,您可以使用List<Pair>
来保存数据。
有几种可能的库类可以根据自己的需要重新定位,但特别是如果这对实际代表某些东西(意味着你将类和属性重命名为更有意义的东西)那么它可以将它放在自己的类中以表示它是有用的。如果您确实想重新使用现有类型,那么Tuple<string,string>
可能是最佳选择。
答案 2 :(得分:0)
尝试使用List<KeyValuePair<string, string>>
。
答案 3 :(得分:0)
Dictionary
是一个散列的位置键,因此您不能在字典中包含重复项。您可以使用<string,string>
或KeyValuePair
Tuple
类型的列表
答案 4 :(得分:0)
如果您使用的是.NET 3.5或更低版本,则List<KeyValuePair<string, string>>
可能会运行良好,如果为4或更高版本,List<Tuple<string, string>>
将成为赢家。