私はC#のAccessファイルエディタで作業していましたが、自分のプログラムに検索機能を追加しようとしています。これまでのところ、データベースファイルに2次元配列を設定して、別のウィンドウでListViewボックスを作成しました。この新しいウィンドウから、モデル番号で各エントリを検索できるようにしたいと思います。これまでのところ、私はLevensteinアルゴリズムを組み込むことに成功しました。私は、各エントリと検索キーボードとの間の距離値を割り当て、その値を別の整数配列に割り当てるアルゴリズムを得ることができます。結果を並べ替えることもできます。Levensteinアルゴリズムの結果を使用して文字列配列を並べ替える
しかし私の現在の問題は、最も関連性の高い結果がListViewの最初の選択肢になるように、Levensteinアルゴリズムの距離値と同じ点でモデル番号をソートしたいと思うことです。任意のアイデア誰ですか?!?!ここで
は私がこれまで持っているものです:
private void OnSearch(object sender, System.EventArgs e)
{
string a;
string b;
int[] result = new int[1000];
int[] sorted = new int[1000];
for (int i = 0; i < rowC; i++)
{
a = PartNum[i]; // Array to search
b = SearchBox1.Text; // keyword to search with
if (GetDistance(a, b) == 0)
{
return;
}
result[i] = GetDistance(a, b); //add each distance result into array
}
int index;
int x;
for (int j = 1; j < rowC; j++) //quick insertion sort
{
index = result[j];
x = j;
while ((x > 0) && (result[x - 1] > index))
{
result[x] = result[x - 1];
x = x - 1;
}
result[x] = index;
}
}
public static int GetDistance(string s, string t)
{
if (String.IsNullOrEmpty(s) || String.IsNullOrEmpty(t))
{
MessageBox.Show("Please enter something to search!!");
return 0;
}
int n = s.Length;
int m = t.Length;
if (n == 0)
{
return m;
}
else if (m == 0)
{
return n;
}
int[] p = new int[n + 1];
int[] d = new int[n + 1];
int[] _d;
char t_j;
int cost;
for (int i = 0; i <= n; i++)
{
p[i] = i;
}
for (int j = 1; j <= m; j++)
{
t_j = t[j - 1];
d[0] = j;
for (int i = 1; i <= n; i++)
{
cost = (s[i - 1] == t_j) ? 0 : 1;
d[i] = Math.Min(Math.Min(d[i - 1] + 1, p[i] + 1), p[i - 1] + cost);
}
_d = p;
p = d;
d = _d;
}
return p[n];
}
2番目のオプションを使用してTakeWhile()を挿入するとどうなりますか?あなたは次のようなものになります: "...})。TakeWhile(i => i.distance!= 0).ToList();" 最後のインデックスを確認して使用するか、後で並べ替えることができます。 –
真。可能であれば、私はそれを単純にしておきたいと思う。余分な仕事が何かを害するとは思っていない。しかし、オプションを持っているニース:) –