gpt4 book ai didi

c# - 二进制搜索字符串数组未找到搜索的字符串 C#

转载 作者:行者123 更新时间:2023-12-02 08:38:27 29 4
gpt4 key购买 nike

我正在尝试使用已在文本框中输入的文本来搜索对象数组。

我已经将对象数组转换为字符串数组,但是,我仍然没有找到正确的索引

我正在按照要求使用 C# 中内置的二进制搜索选项。我无法改变这一点。

如果有人可以提供帮助,那就太好了 - 如果您需要我提供任何帮助,请不要害怕给我留言。

这是客户数组

Customer[] cust = new Customer[20];

这是客户类别的排序方法

private void customerSort()
{
for (int y = 0; y < 20; y++)
{
for (int x = 0; x < customerPTR - 1; x++)
{
if (string.Compare(cust[x].GSname, cust[x + 1].GSname) > 0)
{
customerSwapRoutine(cust[x]);
}
}
}
}

和交换例程

private void customerSwapRoutine(Customer book, int x = 0)
{
string tempString = cust[x].GSname;
cust[x].GSname = cust[x + 1].GSname;
cust[x + 1].GSname = tempString;

string tempString2 = cust[x].GScID;
cust[x].GScID = cust[x + 1].GScID;
cust[x + 1].GScID = tempString2;

string tempString3 = cust[x].GSlocation;
cust[x].GSlocation = cust[x + 1].GSlocation;
cust[x + 1].GSlocation = tempString3;

string tempString4 = cust[x].GSemail;
cust[x].GSemail = cust[x + 1].GSemail;
cust[x + 1].GSemail = tempString4;
}

这是客户类别

class Customer
{
private string name, location, email, cID;

public string GScID
{
get { return cID; }
set { cID = value; }
}
public string GSname
{
get { return name; }
set { name = value; }
}
public string GSlocation
{
get { return location; }
set { location = value; }
}
public string GSemail
{
get { return email; }
set { email = value; }
}
public string displayCustomer()
{
return GScID + " " + GSname + " " + GSlocation + " " + GSemail;
}
}

这是搜索方法

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
string[] str = new string[cust.Length];

for(int y = 0; y < cust.Length; y++)
{
if(cust[y] == null)
{
Customer nc = new Customer();
cust[y] = nc;
cust[y].GScID = "";
cust[y].GSemail = "";
cust[y].GSlocation = "";
cust[y].GSname = "";
}

str[y] = cust[y].GScID;
}

string stringcID = tbCUSTOMERID.Text;

int found = Array.BinarySearch(str, stringcID);

if (found < 0)
{
MessageBox.Show("Customer doesn't exist");
}
else
{
MessageBox.Show("Customer found!");
tbCUSTOMERID.Text = cust[found].GScID;
tbCUSTOMERNAME.Text = cust[found].GSname;
tbCITY.Text = cust[found].GSlocation;
tbEMAIL.Text = cust[found].GSemail;
}
}

最佳答案

如果您查看这部分代码:

for(int y = 0; y < cust.Length; y++)
{
if(cust[y] == null)
{
Customer nc = new Customer();
cust[y] = nc;
cust[y].GScID = "";
cust[y].GSemail = "";
cust[y].GSlocation = "";
cust[y].GSname = "";
}

str[y] = cust[y].GScID;
}
string stringcID = tbCUSTOMERID.Text;
int found = Array.BinarySearch(str, stringcID);

在执行 BinarySearch 之前,您将向 cust 数组中插入大量新的 Customer 对象。这将打破现有的排序。

请参阅documentation

Searches the entire sorted List for an element using the specified comparer and returns the zero-based index of the element.

整个数组应该已经在 BinarySearch 之前排序。因此,您需要在添加这些新的 Customer 对象后再次对数组进行排序。或者您应该将这些新的 Customer 对象添加到排序字符串中的正确索引中,以便它可以保持正确的排序。

还有另一个错误,customerSort 函数使用 GSname 字段进行排序。但是 string[] str 数组由 GScID 字段组成。您应该对相同的内容进行排序和搜索。

所以,你的代码有错误。如果您确保排序,那么它应该可以工作。

关于c# - 二进制搜索字符串数组未找到搜索的字符串 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59168427/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com