如何在一个数组队列中防止插入重复值?

woodmud 2018-06-09 12:05:44
为了防止在整数队列中插入重复值,可以采用Contains方法进行检测
int[] numbers = { 1, 1, 2, 3, 4, 2, 5, 6, 7 };
Queue<int> q = new Queue<int>();
foreach (var item in numbers)
{
if (!q.Contains(item))
{
q.Enqueue(item);
}
}

请教一下各位大侠,如果现在队列中放入的是整数数组,那么能否采用类似的方式达到上述效果?如下面所示的代码并不能达到需要的效果:
int[] A = { 1, 2, 3 };
int[] B = { 1, 2, 3 };
Queue<int[]> test = new Queue<int[]>();
test.Enqueue(A);
if (test.Contains(B))
MessageBox.Show("存在重复值!");
else
test.Enqueue(B);

请问一下在不额外编写自定义函数的情况有没有解决办法?用自己编写函数的方式我已经解决了。多谢指点!
...全文
1205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-06-11
  • 打赏
  • 举报
回复
重写比较器 类似的帖子是这样的: https://bbs.csdn.net/topics/392318919
woodmud 2018-06-11
  • 打赏
  • 举报
回复
但是这样实现代码不够优雅和规范
woodmud 2018-06-11
  • 打赏
  • 举报
回复
bool equal(byte[,] a, byte[,] b) { for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) if (a[i, j] != b[i, j]) return false; return true; } bool contain(Queue<byte[,]> list, byte[,] a) { foreach (byte[,] x in list) { if (equal(x, a)) return true; } return false; } 这是我自定义的两个函数实现了这项功能,里面队列中的元素是二维数组,主要用来完成8数码问题。
SoulRed 2018-06-10
  • 打赏
  • 举报
回复
LINQ 里有个distinct可以去除重复的数据。不知道是不是你想要的?
  • 打赏
  • 举报
回复
贴出你的“自己编写函数”再问这个函数有什么必要删除。
  • 打赏
  • 举报
回复
引用 4 楼 woodmud 的回复:
请问一下在不额外编写自定义函数的情况有没有解决办法?用自己编写函数的方式我已经解决了。多谢指点!
什么叫做“不额外编写自定义函数”?既然你已经编写了函数,贴出来你的函数。任何设计改变都需要编写自己的代码,只是形式不同而已,空手道去让别人免费设计并不行,还是要以自己写代码为主。
xuzuning 2018-06-10
  • 打赏
  • 举报
回复
你有 在不额外编写自定义函数的情况有没有解决办法?用自己编写函数的方式我已经解决了。 那么实现 IComparable 或 IComparer 接口 和 自己编写函数 究竟有多少区别呢?
woodmud 2018-06-10
  • 打赏
  • 举报
回复
因为数组是按照引用来比较的,能否重新实现接口来实现值比较?
圣殿骑士18 2018-06-09
  • 打赏
  • 举报
回复
没有其他办法
xuzuning 2018-06-09
  • 打赏
  • 举报
回复
int[] 类型没有提供比较相等的方法,所以你的第二段代码不能达成预期的效果
exception92 2018-06-09
  • 打赏
  • 举报
回复
使用Linq的Zip函数进行逐索引比较,最后返回比较结果(比如返回true的个数)再与数组数量比较即可。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧