如何在 ListBox 中查找最小重复值的索引?
Posted
技术标签:
【中文标题】如何在 ListBox 中查找最小重复值的索引?【英文标题】:How to find indexes of the most small duplicated value in a ListBox? 【发布时间】:2021-07-31 18:52:07 【问题描述】:我尝试了所有我可以在网上找到的东西,并花了很多时间但我做不到。
这是一个带有ListBox
的表单,随机数从 20 到 30,我需要找到最小值并显示它的位置。困难的部分是,如果我有 2 个或 3 个相同数量的,那么我不知道该怎么做,我几乎尝试了所有方法。
这是我到目前为止所做的代码:
Random r = new Random();
int[] a;
private void button2_Click(object sender, EventArgs e)
int i;
a = new int[10];
listBox1.Items.Clear();
for (i = 0; i < 10; i++)
a[i] = r.Next(20, 31);
listBox1.Items.Add(a[i]);
private void button1_Click(object sender, EventArgs e)
int[] b;
b = new int[10];
int mini=3435, i,index=0;
b = (int[])a.Clone();
for (i = 1; i < 10; i++)
if (b[i] < mini)
mini = b[i];
index = Array.IndexOf(b, mini);
label2.Text = Convert.ToString("la pozitia: " + index);
label1.Text = Convert.ToString("Minimul este: " +mini );
它应该是这样的:
【问题讨论】:
“困难的部分是,如果我有 2 个或 3 个相同数量的,那么我不知道该怎么做” 那个业务逻辑。 IE。如何做到这一点没有一般规则。这取决于您的业务案例。如果有多个匹配项,您想做什么? 您可以添加频率列 你可以使用 Linq 吗? 我不允许使用 Linq , JHBonariusfor (i = 1; i < 10; i++)
不好。首先:这不是 C,所以你可以在你使用它们的地方声明对象(甚至在 C 中你会写 for (int i=0; ...)
。接下来,在 C# 和类似语言中,索引是从零开始的。即for (int i=0; i < b.Length; i++)
。(或者你可以设置int mini=b[0];
,这也可以)
【参考方案1】:
由于您只想将位置输出为逗号分隔列表,因此您可以为匹配的位置列表使用单独的字符串:
int[] b;
b = new int[10];
int mini = int.MaxValue, i, index = 0;
string miniList = "";
b = (int[])a.Clone();
for (i = 0; i < 10; i++)
if (b[i] < mini)
mini = b[i];
miniList = "";
if (b[i] == mini)
if (!string.IsNullOrEmpty(miniList))
miniList += ", ";
miniList += i;
label1.Text = Convert.ToString("Minimul este: " + mini);
label2.Text = Convert.ToString("la pozitia: " + miniList);
注意:我还将 mini 值设置为 int.MaxValue 开头,因此代码应该适用于任何数字范围
【讨论】:
完美运行,非常感谢!你为我的生命节省了至少 4 个小时 克隆a到b没用,a可以直接用,不是吗? 我想知道 op 是否真的学到了什么 ?? ps 新的 b[10] 甚至 a.clone 并没有增加太多。你可以只使用一个。 @Oliver Rogier 我认为它可以直接使用,但我们的老师希望我们这样做。以上是关于如何在 ListBox 中查找最小重复值的索引?的主要内容,如果未能解决你的问题,请参考以下文章