Saya mencari cara untuk mengulangi string dengan kata, mulai dari akhir dan pergi ke awal, kata demi kata.

Outputnya harus seperti:

  • kata1 kata2 kata3 kata4
  • kata1 kata2 kata3
  • kata1 kata2
  • kata1

Saya tidak benar-benar sekarang di mana/bagaimana memulainya. Sebaliknya saya bekerja, tetapi ternyata bukan itu yang saya butuhkan (lihat di bawah).

string descriptionText = "Column Grid Building"; //example
string[] description1TextArray = descriptionText.Split(' ');
int noItems = description1TextArray.Count();

for (int i = 0; i < noItems; i++)
{
    if (i == 0)
    {
        search = search + description1TextArray[i];
    }
    else
    {
        search = search + " " + description1TextArray[i];
    }

   foreach (DataRow row in dt.Rows)
    {
        description1 = row[0].ToString(); 
        abbreviation1 = row[1].ToString();

        if (description1 == search || abbreviation1 == search)
        {
            comboBoxDescription1.SelectedIndex = comboBoxDescription1.FindStringExact(description1);
        }
    }
}

EDIT:

Maaf untuk kebingungan.

Saya mulai dengan string "word1 word2 word3 word4". Saya sudah mengatur setiap kata ke array.

string[] description1TextArray = descriptionText.Split(' ');
int noItems = description1TextArray.Count();

Saya perlu memeriksa string terhadap nilai dari datatable. Misalnya nilai dalam dataTable adalah "Column Grid". Masukan saya adalah "Pembangunan Kisi Kolom".

Alasan saya perlu memeriksa dari awal ke awal adalah karena ada nilai dalam tabel data yang tumpang tindih, seperti "Kisi Kolom" dan "Kolom". Ketika saya melakukan pengecekan pada string dari awal sampai akhir, nilai "Column Grid" tidak pernah ditemukan karena sudah ditemukan kecocokan pada "Column".

Saya harap ini menjelaskannya dengan lebih baik.

2
lonnebol 15 Januari 2021, 17:46

3 jawaban

Jawaban Terbaik

Anda dapat mencoba ini:

using System.Linq;

string myString = "word1 word2 word3 word4";

var words = myString.Split(' ');

for ( int index = words.Length; index > 0 ; index-- )
{
  string sentence = string.Join(" ", words.Take(index));
  Console.WriteLine(sentence);
}

Ini adalah loop yang mengambil jumlah kata yang diperlukan dengan menghitung mundur pengindeks.

Keluaran

word1 word2 word3 word4
word1 word2 word3
word1 word2
word1
3
Olivier Rogier 15 Januari 2021, 15:31

Coba cara ini

string data = "word1 word2 word3 word4";
var strarray = data.Split(' ');
for ( int i = strarray.Length - 1; i >= 0; i-- )
{
  Console.WriteLine(strarray[i]);
}
0
Olivier Rogier 15 Januari 2021, 15:08

Pertanyaannya agak membingungkan bahkan setelah Edit... Jika saya mengerti dengan benar masalah Anda adalah Anda memiliki beberapa string serupa di database Anda, misalnya Anda mendapatkan:

1) "Kolom"

2) "Kisi kolom"

3) "Kisi kolom halo"

Anda menerima sebagai input string "Column grid hello world" dan Anda perlu menguji string ini VS ketiga item yang disimpan dalam database Anda. Secara teori semua 3 string cocok dengan string input Anda, tetapi Anda ingin tahu mana yang paling mirip? Misalnya dalam hal ini yang ke-3 "kolom menggiling halo".

Apakah itu benar?

Jika ini masalahnya tidak semudah yang Anda pikirkan, karena disebut Fuzzy (atau Perkiraan) pencocokan string.

Bagaimanapun jika Anda 100% yakin bahwa string input Anda akan selalu berupa string di db Anda + sesuatu yang lain, Anda dapat mencoba melakukan hal yang berbeda, karena saya tidak melihat gunanya memecah menjadi array kata. Tidak bisakah Anda menggunakan metode .Contains()?

Sebagai contoh:

string inputString; // user input string
List<string> yourOrderedDbCollection; // dunno if you are using sql or linq, anyway just order by lenght ascending
string foundItem; // the final found item

foreach (string yourDbString in yourOrderedDbCollection) 
{
   if(inputString.Contains(yourDbString))
   {
    foundItem = yourDbString;
    break;
   }
}
0
MaHaZaeL 15 Januari 2021, 15:56