比较列表中的多个元素
Compare multiple element in a list
我想从列表中提取符合以下不同标准的元素的数据:
我的列表包含:
1, name1, Time, quantity
2, name2, Time, quantity
3, name1, Time+1, quantity+1
4, name2, Time+1, quantity+1
....
我的目标:
if (MyList.Contains(name1 && name2))
{
if (name1(quantity) == name2(quantity) && name1(Time) == name2(Time))
{
return quantity;
}
}
我如何创建我的列表:
public class OCO1 : IEquatable<OCO1>
{
public DateTime OrderCreatedTime {get; set;}
public int ID {get; set;}
public decimal Quantity {get; set;}
public string Tag {get; set;}
public override string ToString()
{
return "ID: " + ID + " Name: " + Tag;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
OCO1 objAsOCO1 = obj as OCO1;
if (objAsOCO1 == null) return false;
else return Equals(objAsOCO1);
}
public override int GetHashCode()
{
return ID;
}
public bool Equals(OCO1 other)
{
if (other == null) return false;
return (this.ID.Equals(other.ID));
}
// Should also override == and != operators.
}
public partial class Base
{
List<OCO1> CreatedTimeOrder = new List<OCO1>();
if (order.Tag.Equals("name1"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name1"});
}
if (order.Tag.Equals("name2"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name2"});
}
我不知道该怎么做。任何帮助表示赞赏!
“编辑 post jskfjhsfsjfsgfghsfshsfghjsfgsdsjffsgfgsgfyjhdfusygfyusgfuygfgsdvfvsdufvusvfuvsufvyusdfgyugfdyugfusgfuysfgusfgusgfuysgfgsugfusgfugf=ggy1dguf”的更多细节
“
根据作者的评论:
I want to get the quantity if the Time is the same for name1 and name2. I don't see how to explain it otherwise.
想象一下 class,为简化此答案而缩写。
public class Data
{
public string Name { get; set; }
public int Time { get; set; }
}
还有这个合集
List<Data> list = new List<Data>() {
new Data() { Name = "Name1", Time = 1 },
new Data() { Name = "Name2", Time = 2 },
new Data() { Name = "Name3", Time = 3 },
new Data() { Name = "Name4", Time = 4 },
};
你可以用 LINQ 做到这一点
string searchArray = new string[] { "Name1", "Name2" };
// Filtering only elements with Name equals name1 or name2
var filtered = list.Where(d => searchArray.Contains(d.Name));
if(filtered.GroupBy(d => d.Time).Count() == 1) // If there is only one group of Time
return filtered.Sum(d => d.Time); // it will return 3 (1 + 2)
else
// do another thing
如果我理解这个问题,您想找到所有具有相同 Quantity
和 Time
值并且同时包含 "name1"
和 [=14] 的记录=],对于其中的每一个,您都希望 select Quantity
属性.
如果那是正确的,我们可以使用一点 System.Linq
来根据它们的 OrderCreatedTime
和 Quantity
属性对项目进行分组,过滤到仅具有至少一个项目的组每个想要的名字,然后 select Quantity
属性 来自组:
List<decimal> relevantQuantities = CreatedTimeOrder
.GroupBy(item => new {item.OrderCreatedTime, item.Quantity})
.Where(group => group.Any(item => item.Tag == "name1") &&
group.Any(item => item.Tag == "name2"))
.Select(g => g.Key.Quantity)
.ToList();
如果不正确,请准确说明您希望返回的内容。
我想从列表中提取符合以下不同标准的元素的数据:
我的列表包含:
1, name1, Time, quantity
2, name2, Time, quantity
3, name1, Time+1, quantity+1
4, name2, Time+1, quantity+1
....
我的目标:
if (MyList.Contains(name1 && name2))
{
if (name1(quantity) == name2(quantity) && name1(Time) == name2(Time))
{
return quantity;
}
}
我如何创建我的列表:
public class OCO1 : IEquatable<OCO1>
{
public DateTime OrderCreatedTime {get; set;}
public int ID {get; set;}
public decimal Quantity {get; set;}
public string Tag {get; set;}
public override string ToString()
{
return "ID: " + ID + " Name: " + Tag;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
OCO1 objAsOCO1 = obj as OCO1;
if (objAsOCO1 == null) return false;
else return Equals(objAsOCO1);
}
public override int GetHashCode()
{
return ID;
}
public bool Equals(OCO1 other)
{
if (other == null) return false;
return (this.ID.Equals(other.ID));
}
// Should also override == and != operators.
}
public partial class Base
{
List<OCO1> CreatedTimeOrder = new List<OCO1>();
if (order.Tag.Equals("name1"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name1"});
}
if (order.Tag.Equals("name2"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name2"});
}
我不知道该怎么做。任何帮助表示赞赏!
“编辑 post jskfjhsfsjfsgfghsfshsfghjsfgsdsjffsgfgsgfyjhdfusygfyusgfuygfgsdvfvsdufvusvfuvsufvyusdfgyugfdyugfusgfuysfgusfgusgfuysgfgsugfusgfugf=ggy1dguf”的更多细节
“
根据作者的评论:
I want to get the quantity if the Time is the same for name1 and name2. I don't see how to explain it otherwise.
想象一下 class,为简化此答案而缩写。
public class Data
{
public string Name { get; set; }
public int Time { get; set; }
}
还有这个合集
List<Data> list = new List<Data>() {
new Data() { Name = "Name1", Time = 1 },
new Data() { Name = "Name2", Time = 2 },
new Data() { Name = "Name3", Time = 3 },
new Data() { Name = "Name4", Time = 4 },
};
你可以用 LINQ 做到这一点
string searchArray = new string[] { "Name1", "Name2" };
// Filtering only elements with Name equals name1 or name2
var filtered = list.Where(d => searchArray.Contains(d.Name));
if(filtered.GroupBy(d => d.Time).Count() == 1) // If there is only one group of Time
return filtered.Sum(d => d.Time); // it will return 3 (1 + 2)
else
// do another thing
如果我理解这个问题,您想找到所有具有相同 Quantity
和 Time
值并且同时包含 "name1"
和 [=14] 的记录=],对于其中的每一个,您都希望 select Quantity
属性.
如果那是正确的,我们可以使用一点 System.Linq
来根据它们的 OrderCreatedTime
和 Quantity
属性对项目进行分组,过滤到仅具有至少一个项目的组每个想要的名字,然后 select Quantity
属性 来自组:
List<decimal> relevantQuantities = CreatedTimeOrder
.GroupBy(item => new {item.OrderCreatedTime, item.Quantity})
.Where(group => group.Any(item => item.Tag == "name1") &&
group.Any(item => item.Tag == "name2"))
.Select(g => g.Key.Quantity)
.ToList();
如果不正确,请准确说明您希望返回的内容。