Schnelleres List<string>.FindIndex

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Schnelleres List<string>.FindIndex

    Hey,
    Ich brauche eine Klasse, welche Listenähnliche funktionen beinhaltet, aber wo FindIndex schneller ist, dafür habe ich jetzt folgende klasse geschrieben:

    C#-Quellcode

    1. class findAbleWords
    2. {
    3. Dictionary<char, int> WordListOffset = new Dictionary<char, int>();
    4. Dictionary<char, List<string>> WordList = new Dictionary<char, List<string>>();
    5. public findAbleWords(string[] input)
    6. {
    7. foreach (var item in input)
    8. {
    9. if (!WordList.ContainsKey(item[0]))
    10. {
    11. WordList.Add(item[0],new List<string>());
    12. }
    13. WordList[item[0]].Add(item);
    14. }
    15. foreach (var item in WordList.Keys)
    16. {
    17. WordListOffset.Add(item,WordList[item].Count);
    18. }
    19. }
    20. public int findIndex(string item)
    21. {
    22. return WordList[item[0]].FindIndex(a => a == item)+ WordList[item[0]].Count;
    23. }
    24. public string ElementAt(int elem)
    25. {
    26. int elem_t = elem;
    27. char breakelem = 'a';
    28. foreach (var item in WordListOffset.Keys)
    29. {
    30. if (elem_t - WordListOffset[item] >= 0)
    31. {
    32. elem_t = elem_t - WordListOffset[item];
    33. }else
    34. {
    35. breakelem = item;
    36. break; //93246
    37. }
    38. }
    39. return WordList[breakelem][elem_t];
    40. }
    41. }

    Nur funktioniert das ganze noch nicht so ganz. Findindex funktioniert zwar, und ist immens schneller als das findindex einer normalen liste, nur gibt elementAt(findIndex("meinWort")) nicht wieder "meinWort" aus. Findet ihr den Logikfehler?
    Mfg
    Wer Rechtschreibfehler findet darf sie behalten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „WeLoveBurgers“ ()

    irgendwie versteh ich den Sinn deines WorldListOffsets nicht. Was bringt dir der Count der eigenen Liste, die nachher auch nichts anderes ist als der Count, den du in Zeile 23 verwendest.

    Aber wenn ich es so sehe, wie es für mich nur Sinn ergeben kann, dann wäre das einfach nur eine sortierte Liste mit einer binären Suche.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---