配列を組み合わせて順序を維持しますが、ある配列の順序を別の配列よりも優先します

マックスプリーナー

2つの配列があるとします。

Arr1 = ["1-a", "1-b", "1-c"]
Arr2 = ["2-a", "2-b", "2-c"]

私はそれらを配列に結合し、それらの順序を維持する方法を知っています:

  Arr1.zip(Arr2).flatten(1)
  # => ["1-a", "2-a", "1-b", "2-b", "1-c", "2-c"]

この例では、「1-a」が「2-a」の前に表示され、「1-c」が「2-c」の前に表示されるため、Arr1はArr2よりも「優先」されていると見なします。

Arr2が「優先」されている場合は次のようになります。

Arr2.zip(Arr1).flatten(1)
# => ["2-a", "1-a", "2-b", "1-b", "2-c", "1-c"]

これらの例では、「priority」はバイナリ状態です。しかし、小数を使用したい場合はどうなりますか?これが私がしたいことです:

y axis: percentage of added nodes that are Arr1
x axis: percent completion of Arr2 iteration

   100% |                     X
        |           
   75%  |                X
        |
   50%  |           X
        |
   25%  |       X
        |
    0%  |  X        
        ------------------------- 
           0%  25%  50%  75%  100%
マックスプリーナー

これが私が書いたものです

class Array

  # helper method to help with testing
  def mean
    map(&:to_f).reduce(&:+) / length.to_f
  end

  # target is another array
  # priority is a number between 0 and 1
  #   if 0, then target will not be merged in at all
  #   if 1, then the result will be ~50% composed of target
  # returns array with the same length as self
  # Note that the result will not contain all of self.concat(target)

  def priority_merge(priority, target)
    # clone the arrays to avoid side-effects
    arr1, arr2 = [self, target].map(&:clone)
    # get the original length to determine the results length
    arr1_len = arr1.length.to_f
    # convert priority to float
    priority = priority.to_f
    # initialize a results set
    results = []
    # populate the results set
    arr1_len.to_i.times do |arr1_idx|
      # determine the percentage completed through iteration
      pct_iterated = arr1_idx.to_f / arr1_len.to_f
      # calculate per-run likelihood of favoring target
      per_run_priority = pct_iterated * priority
      # conclusively determine which array this iteration will pull from
      num_true_cases = (100.0 * per_run_priority).to_i
      cases = num_true_cases.times.map { true }.concat((100 - num_true_cases).times.map { false })
      priority_run_result = cases.sample
      # push from arr2 if the priority run result is true, otherwise push from arr1
      elem_to_push = (priority_run_result ? arr2 : arr1).shift
      # if arr2 is empty, push from arr1 instead 
      results << elem_to_push || arr1.shift
    end
    results
  end
end

そしてそれをテストします

a1 = 50.times.map { 1 }
a2 = 50.times.map { 2 }

puts "MERGE CASE 1"
result = 50.times.map do
  result = a1.priority_merge(1.0, a2)
  result.select { |item| item == 2 }.count.to_f / a1.length.to_f
end
puts result.mean
# => is around 50%

puts "MERGE CASE 0.5"
result = 50.times.map do
  result = a1.priority_merge(0.5, a2)
  result.select { |item| item == 2 }.count.to_f / a1.length.to_f
end
puts result.mean
# => is around 25%
puts "MERGE CASE 0"
result = 50.times.map do
  result = a1.priority_merge(0.0, a2)
  result.select { |item| item == 2 }.count / a1.length.to_f
end
puts result.mean
# => is 0%

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

配列の元の順序を維持するために、.uniqを何と組み合わせることができますか?

分類Dev

json配列を別のもので置き換えますが、順序は維持します

分類Dev

配列の順序を維持しますが、値を変更します

分類Dev

Swift配列:別の配列を使用して配列をフィルタリングしている間、順序を維持します

分類Dev

順序を尊重しながら、可能なすべての組み合わせのJavaScript配列を再帰的に構築します

分類Dev

キーの配列を使用して、「順序」を維持しながら別の配列をフィルタリングします

分類Dev

単語の列の順序を維持しながら、単語の文字列の配列を分割します

分類Dev

配列をマージして順序を維持する

分類Dev

Swift 3設定と順序の維持を使用して、別の配列に存在するオブジェクトを配列から削除します

分類Dev

配列の要素のすべての順序付けられた連続した組み合わせを取得します

分類Dev

javascript配列の内容を比較する方法はありますが、順序は比較しませんか?

分類Dev

2つのコレクションを組み合わせ、並べ替え順序を保持してから、千鳥配列で表示します

分類Dev

値が存在する場合に別の配列を使用して配列を順序付けるphp

分類Dev

順序を維持しながら、別の配列に基づいて配列内の一意の値を保持する

分類Dev

配列要素を最初の位置に移動しますが、順序は維持します

分類Dev

再帰的な配列検索-適切な順序を維持し、配列を繰り返し処理します

分類Dev

JavaScriptを使用して、配列から別の配列に異なる順序で値をプルします

分類Dev

元の順序を維持したままモノ配列オブジェクトを作成する

分類Dev

Javascript-配列を使用してHTMLコンテンツの順序を変更しようとしているCodepen関数は機能していますが、あまりよくありません理由がわかりません

分類Dev

配列を並べ替えて一致する要素をグループ化しますが、元の順序を維持します

分類Dev

連想配列の順序を維持する方法は?

分類Dev

bash連想配列の挿入順序を維持する

分類Dev

配列要素を特定の順序で繰り返します

分類Dev

キーの順序で複数の配列を組み合わせる

分類Dev

2つの配列を特定の順序で組み合わせる

分類Dev

配列が別の配列に含まれているかどうかを逆の順序で少なくとも2回チェックします

分類Dev

最初の配列のサブセットを使用して2つの配列を「クロスオーバー」し、可能な場合は2番目の配列の順序を維持しようとしています

分類Dev

Javascriptが配列の順序を変更します

分類Dev

Javascriptが配列の順序を変更します

Related 関連記事

  1. 1

    配列の元の順序を維持するために、.uniqを何と組み合わせることができますか?

  2. 2

    json配列を別のもので置き換えますが、順序は維持します

  3. 3

    配列の順序を維持しますが、値を変更します

  4. 4

    Swift配列:別の配列を使用して配列をフィルタリングしている間、順序を維持します

  5. 5

    順序を尊重しながら、可能なすべての組み合わせのJavaScript配列を再帰的に構築します

  6. 6

    キーの配列を使用して、「順序」を維持しながら別の配列をフィルタリングします

  7. 7

    単語の列の順序を維持しながら、単語の文字列の配列を分割します

  8. 8

    配列をマージして順序を維持する

  9. 9

    Swift 3設定と順序の維持を使用して、別の配列に存在するオブジェクトを配列から削除します

  10. 10

    配列の要素のすべての順序付けられた連続した組み合わせを取得します

  11. 11

    javascript配列の内容を比較する方法はありますが、順序は比較しませんか?

  12. 12

    2つのコレクションを組み合わせ、並べ替え順序を保持してから、千鳥配列で表示します

  13. 13

    値が存在する場合に別の配列を使用して配列を順序付けるphp

  14. 14

    順序を維持しながら、別の配列に基づいて配列内の一意の値を保持する

  15. 15

    配列要素を最初の位置に移動しますが、順序は維持します

  16. 16

    再帰的な配列検索-適切な順序を維持し、配列を繰り返し処理します

  17. 17

    JavaScriptを使用して、配列から別の配列に異なる順序で値をプルします

  18. 18

    元の順序を維持したままモノ配列オブジェクトを作成する

  19. 19

    Javascript-配列を使用してHTMLコンテンツの順序を変更しようとしているCodepen関数は機能していますが、あまりよくありません理由がわかりません

  20. 20

    配列を並べ替えて一致する要素をグループ化しますが、元の順序を維持します

  21. 21

    連想配列の順序を維持する方法は?

  22. 22

    bash連想配列の挿入順序を維持する

  23. 23

    配列要素を特定の順序で繰り返します

  24. 24

    キーの順序で複数の配列を組み合わせる

  25. 25

    2つの配列を特定の順序で組み合わせる

  26. 26

    配列が別の配列に含まれているかどうかを逆の順序で少なくとも2回チェックします

  27. 27

    最初の配列のサブセットを使用して2つの配列を「クロスオーバー」し、可能な場合は2番目の配列の順序を維持しようとしています

  28. 28

    Javascriptが配列の順序を変更します

  29. 29

    Javascriptが配列の順序を変更します

ホットタグ

アーカイブ