新手问题 求教 [二维数组]

woody1983 · 2013年07月19日 · 最后由 lostleaf 回复于 2013年07月20日 · 6208 次阅读

折磨我一下午了

我想创建一个二维数组 每个数组的元素是1到10 ,每个数组的元素长度为3,每个数组内容不一样

说实话有点晕

我语言表达有点问题 例子如下

[
  [1, 2, 3],
  [1, 2, 4],
  [1, 2, 5],
  [1, 2, 6],
  [1, 2, 7],
...

]

总之就素...

🇽 不能同时出现 [1,2,3] 和 [3,2,1] 虽然顺序不同 但元素一样 🇽 单个数组的元素不能出现 [9,9,9] 同一个元素在一个 Array 里只能出现一次

不读懂 我都晕了

#1 楼 @lostleaf 大概是这个例子

楼主说「一个二维数组」,后面又说「每个数组」。我只能假定后面的「每个数组」都是那「一个二维数组」里面的元素了。

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

#4 楼 @woody1983 ok, 那你想问什么呢……

#5 楼 @blacktulip 怎么生成这些 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

有几个条件不清楚,[1, 1, 0] 允许不?[1, 2, 3] 和 [3, 2, 1] 算「内容一样」不?

总之都可以用 100 - 999 遍历,在循环内拆开去对条件。或者 0-9 遍历套三层

笨方法

arr_base = [1,2,3,4,5,6,7,8,9,10]
arr = []

arr_base.each do |a|
  arr_base.each do |b|
    arr_base.each do |c|
      arr[arr.length] = [a,b,c]
    end
  end
end

print arr

#7 楼 @blacktulip 1、[a, b, c] abc 三个元素之间不能重复 2、两个 [array] [array1] 之间的内容也不能重复 [1, 2, 3] 和 [3, 2, 1]算做重复

#9 楼 @Msms 你这样会有 [10, 10, 10] 类似的数组粗线。。。 (∵)nnn

$ gvim two_dimension_array.rb

#/usr/bin/env ruby #-- coding: utf-8 --

# Generate a 10x3 two-dimension array that each second dimension array has unique content.

class ArrayGenerator def initialize(length, width) @length, @width = length, width @array = Array.new end def get_array @length.times do @array.push random_array(@width) end @array end private def random_array(width) array = Array.new width.times do array.push rand(10) end array end end

if FILE == $0 g = ArrayGenerator.new 10, 3 p g.get_array end

$ ruby two_dimension_array.rb [[2, 9, 5], [5, 3, 4], [6, 8, 5], [5, 4, 7], [2, 3, 3], [6, 4, 6], [7, 4, 6], [8, 2, 5], [0, 3, 9], [8, 9, 9]]

(111..999).map { |x| x.to_s.chars.map(&:to_i) }

这个呢

arr_base = [1,2,3,4,5,6,7,8,9,10]
arr = []

arr_base.each do |a|
  arr_base[a..9].each do |b|
    arr_base[b..9].each do |c|
      arr[arr.length] = [a,b,c]
    end
  end
end

print arr

#12 楼 @chinakr 有 [6, 4, 6] & [8, 9, 9] 混进来了~

#13 楼 @cantin [9, 9, 8], [9, 9, 9] 就这些东西太讨厌

你是要这个么?

(1..10).to_a.combination(3).to_a

#14 楼 也是正确的。 排列 组合的问题只需要打破对称性就容易列举了。既然顺序不重要,可以规定 [a, b, c]a < b < c

#17 楼 @doitian 居然有这么流氓的 api ……

#17 楼 正解

#19 楼 @blacktulip ... combination 和 permutation 很正常吧,标准库连矩阵 QR 分解,LUP 分解都有 API

#20 楼 @luikore 好吧... 我见识少 -_-

#17 楼 @doitian 真心 NB,三层循环,果然是笨方法

#20 楼 @luikore 这都有 一向只会用 matlab

需要 登录 后方可回复, 如果你还没有账号请 注册新账号