我有一个填充了大约50个帖子的HashSet,我希望将它们两个一对地放入我的数据库中(帖子分别是title
和description
)。问题是我不能把逻辑放在一起。下面的代码可能会更好地解释我的想法:
foreach(string item in hash)
{
// Here something that assigns every uneven HashSet-post to item1, the even ones to item2
var NewsItem = new News
{
NewsTitle = item1
NewsDescription = item2
};
dbContext db = new dbContext();
db.News.Add(NewsItem);
db.SaveChanges();
}
答案 0 :(得分:3)
您不能从基于散列的容器中“配对”项目,因为从逻辑角度来看,这些容器是任意排序的 * 。
因此,在将数据插入哈希集时,需要将标题和描述配对,如下所示:
class Message {
public string Title {get;set;}
public string Description {get;set;}
public int GetHashCode() {return 31*Title.GetHashCode()+Description.GetHashCode();}
public bool Equals(object other) {
if (other == this) return true;
Message obj = other as Message;
if (obj == null) return false;
return Title.Equals(obj.Title) && Description.Equals(obj.Description);
}
}
ISet<Message> hash = new HashSet<Message>();
此时,您可以将消息插入哈希集。标题和说明将始终通过参与单个Message
对象明确配对。
* Microsoft当前的实现确实维护了插入顺序,但这是一个不幸的实现细节。
答案 1 :(得分:-1)
我定义HashSet中的第一项是奇数(1),第二项是偶数(2)等。
然后HashSet
不是正确的数据结构。 HastSet
没有任何特定的顺序,所以如果您需要按顺序提取项目,那么普通的List<string>
就可以了。
那就是说,做你需要的一种方法是使用一个for
循环来获取两个项目
时间:
using(dbContext db = new dbContext())
{
for(int i = 0; i < list.Count - 1; i += 2)
{
var NewsItem = new News
{
NewsTitle = list[i];
NewsDescription = list[i+1];
};
db.News.Add(NewsItem);
}
}
db.SaveChanges();