何が起こっているのか分かりません。最近私はthisコードをとり、少し編集しました。私はバグを発見したので、デバッグしようとしましたが、奇妙な動作に遭遇しました。 Somewhy同じ文字で構成される2つの異なるchar配列から作成された2つの文字列は等しくなく、またデバッグ文字列も切り詰められます。文字列自体が魔法にかかっています
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class AlphanumericComparer : IComparer<string>
{
public int Compare(string s1, string s2)
{
if (s1 == null || s2 == null)
return 0;
int len1 = s1.Length;
int len2 = s2.Length;
int i1 = 0;
int i2 = 0;
while (i1 < len1 && i2 < len2)
{
char c1 = s1[i1];
char c2 = s2[i2];
char[] chunk1 = new char[len1];
int j1 = 0;
char[] chunk2 = new char[len2];
int j2 = 0;
do
{
Debug.Log("1: " + i1 + " _ " + j1 + " _ " + c1); // Seems to be OK.
chunk1[j1++] = c1;
i1++;
if (i1 < len1)
c1 = s1[i1];
else
break;
} while (char.IsDigit(c1) == char.IsDigit(chunk1[0]));
do
{
Debug.Log("2: " + i2 + " _ " + j2 + " _ " + c2); // Seems to be OK.
chunk2[j2++] = c2;
i2++;
if (i2 < len2)
c2 = s2[i2];
else
break;
} while (char.IsDigit(c2) == char.IsDigit(chunk2[0]));
string str1 = new string(chunk1);
string str2 = new string(chunk2);
Debug.Log(str1.CompareTo(str2) + " " + str1 + " " + str2); // "1"?! And also why is string cutted?!
int result;
if (char.IsDigit(chunk1[0]) && char.IsDigit(chunk2[0]))
{
result = int.Parse(str1).CompareTo(int.Parse(str2));
//Debug.Log(s1 + " _ " + s2 + " _ " + int.Parse(str1) + " _ " + int.Parse(str2) + " _ " + result);//tmp
Debug.Log(string.Format("{0}, {1}, {2}, {3}, {4}", s1, s2, int.Parse(str1), int.Parse(str2), result));//tmp
}
else
{
result = str1.CompareTo(str2);
//Debug.Log(s1 + " _ " + s2 + " _ " + str1 + " _ " + str2 + " _ " + result);//tmp
Debug.Log(string.Format("{0}, {1}, {2}, {3}, {4}", s1, s2, str1, str2, result));//tmp
}
if (result != 0)
return result;
}
return len1 - len2;
}
}
すべてのIDEをリロードしようとしましたが、何ももたらされませんでした。私は比較マイ文字列:次の文字列の並べ替え工事のために
string[] test = new string[] { "qwe45", "qwe13a" };
期待や行動はなく、cuttedデバッグ文字列のバグを異なるのでまだそこにある:私は
string[] test = new string[] { "qwe45", "qwe13" };
何を間違っているのか、私はないです場合は午前、これを回避する方法は?私はこのように分割した場合
また:
UPDATEは
Debug.Log(str1);
Debug.Log(str2);
それは正しいものを示しているが、CompareTo
はまだいくつかのゴミを返します。
「cutted debug string」とはどういう意味ですか? –
@KevinHooke 'Debug.Log(str1.CompareTo(str2)+" "+ str1 +" "+ str2);は' 0 qwe qwe'を返しますが、 '1 qwe'を返します。そして、 'Debug.Log(string.Format(" {0}、{1}、{2}、{3}、{4} "、s1、s2、str1、str2、result));' 'qwe13a 、qwe45、qwe、qwe、0'を返すが、 'qwe13a、qwe45、qwe'を返す。 – Necronomicron
私にはいいようです。ここで出力を確認してくださいhttps://dotnetfiddle.net/QqbTcd – failedprogramming