ホーム>source

私はフラッターの初心者で、ダーツについてはあまり知らないので、自分の問題について質問したいと思います。 listbの各文字*を接ぎ木するこの私の例は、listaのforeach要素です:

<前>ウィズウィズ

結果出力

<前>ウィズウィズ

そして、listbで置き換えられる文字*が "a ***********"である場合は非常に悪いです:)) 置換が必要な1つの文字をエスケープするためのより簡単な方法はありますか?ありがとう!

void main() { var lista = ['1', '2', '3']; var listb = ['a***' ,'b*','c']; List<String> filter1 = []; List<String> filter2 = []; List<String> filter3 = []; // for (var value in listb) { if (value.contains("*")) { for (var aa in lista) { filter1.add( value.replaceFirst('*', '$aa')); } } } listb.removeWhere((aaa) => aaa.contains('*')); filter1 = List.from(filter1)..addAll(listb) ; print('filter1' + '$filter1'); // for (var value in filter1) { if (value.contains("*")) { for (var aa in lista) { filter2.add( value.replaceFirst('*', '$aa')); } } } filter1.removeWhere((aaa) => aaa.contains('*')); filter2 = List.from(filter2)..addAll(filter1) ; print('filter2' + '$filter2'); // for (var value in filter2) { if (value.contains("*")) { for (var aa in lista) { filter3.add( value.replaceFirst('*', '$aa')); } } } filter2.removeWhere((aaa) => aaa.contains('*')); filter3 = List.from(filter3)..addAll(filter2) ; print('filter3' + '$filter3'); }
あなたの答え
  • 解決した方法 # 1

    入力文字列のデカルト積を取ることにより、一般的なソリューションを作成できます。


    ステップ1:

    これらは入力リストです。

    <前>ウィズウィズ

    以下に示すように、各「listb」アイテムを分割します

    <前>ウィズウィズ

    ステップ2:

    アスタリスク記号ごとに、入力文字列のデカルト積を計算します。

    <前>ウィズウィズ

    完全なスニペットはこちらです。

    <前>ウィズウィズ

    出力は

    <前>ウィズウィズ

    DartPadでライブデモを見ることができます。

  • 解決した方法 # 2

    ダリッシュの答えは集合論のクールなアプリケーションですが、それはやり過ぎだと私は主張します。 var lista = ['1', '2', '3']; var listb = ['a***' ,'b*','c']; でもこれを実現できます  そして、再帰的なジェネレータメソッド:

    ウィズウィズ
    

    これにより、次のリスト(フォーマット済み)が出力されます。

    <前>ウィズウィズ listb.forEach((value) { ///split the string with asterisk symbol var symbols = value.split('*'); }

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ background - Android Qが間違ったグラデーションの向きを表示する