亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 121709 | 回復(fù): 14
打印 上一主題 下一主題

ruby掃盲之?dāng)?shù)組十二問(wèn) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-12-07 11:50 |只看該作者 |倒序?yàn)g覽
1. 如何創(chuàng)建數(shù)組?

最簡(jiǎn)單的,x=[]將創(chuàng)建一個(gè)空數(shù)組:

irb(main):004:0> x = []
=> []


另外還可以使用標(biāo)準(zhǔn)的new方法,任何數(shù)組都是Array類(lèi)的實(shí)例。

irb(main):001:0> x = Array.new
=> []

irb(main):002:0> x = Array.new(3)
=> [nil, nil, nil]

irb(main):003:0> x = Array.new(3,"a")
=> ["a", "a", "a"]


上述第一個(gè)創(chuàng)建空數(shù)組,第二個(gè)創(chuàng)建預(yù)設(shè)SIZE的數(shù)組,第三個(gè)創(chuàng)建預(yù)設(shè)SIZE和值的數(shù)組。
跟Hash一樣,第三種方法填充的預(yù)設(shè)值,都指向同一個(gè)目標(biāo)。
任何一個(gè)位置的目標(biāo)改變了,都影響所有元素的值:

irb(main):005:0> x = Array.new(3,"a")
=> ["a", "a", "a"]

irb(main):006:0> x[0] << "b"
=> "ab"

irb(main):007:0> x
=> ["ab", "ab", "ab"]


創(chuàng)建的數(shù)組,每個(gè)元素都是唯一目標(biāo),要這樣做:

irb(main):008:0> x = Array.new(3) do |e| e = "a" end
=> ["a", "a", "a"]

irb(main):009:0> x[0] << "b"
=> "ab"

irb(main):010:0> x
=> ["ab", "a", "a"]


當(dāng)然還可以如下創(chuàng)建數(shù)組:

irb(main):012:0> x = Array.[](1,2,3)
=> [1, 2, 3]

irb(main):013:0> x = Array[1,2,3]
=> [1, 2, 3]


不過(guò)很少使用,不如x=[1,2,3]來(lái)的簡(jiǎn)潔方便。


2. 如何訪(fǎng)問(wèn)數(shù)組?

使用數(shù)組下標(biāo):

irb(main):014:0> x = [3,2,1,4]
=> [3, 2, 1, 4]

irb(main):015:0> x[0]
=> 3

irb(main):016:0> x[-1]
=> 4


0表示第一個(gè)元素,-1表示最后一個(gè)元素,其他類(lèi)推。

還有first和last方法:

irb(main):017:0> x.first
=> 3
irb(main):018:0> x.last
=> 4


first和last可以帶一個(gè)整數(shù)參數(shù),表示返回首尾多少個(gè)元素。

遍歷數(shù)組使用each方法:

irb(main):024:0> x.each do |s| puts s end
1
2
3
=> [1, 2, 3]



3. 數(shù)組的slice?

數(shù)組的slice可以對(duì)數(shù)組切片,返回指定位置和長(zhǎng)度的片段。

irb(main):021:0> x[0,2]
=> [3, 2]

irb(main):022:0> x[0..2]
=> [3, 2, 1]

irb(main):023:0> x[0...2]
=> [3, 2]


第一個(gè)表述從0位置開(kāi)始切片,長(zhǎng)度為2,返回2個(gè)元素。
第二個(gè)表示從0位置開(kāi)始切片,到2位置結(jié)束,返回3個(gè)元素。
第三個(gè)表示從0位置開(kāi)始切片,到2位置結(jié)束,但是不包括最后一位,返回2個(gè)元素。


4. 如何修改數(shù)組?

數(shù)組有push和<<方法,表示添加元素到數(shù)組尾部:

irb(main):024:0> x = [3,2,1,4]
=> [3, 2, 1, 4]

irb(main):025:0> x.push(5)
=> [3, 2, 1, 4, 5]

irb(main):026:0> x << 6
=> [3, 2, 1, 4, 5, 6]


pop方法表示從尾部刪除元素,shift表示從首部刪除元素:

irb(main):027:0> x.pop
=> 6

irb(main):028:0> x.shift
=> 3


對(duì)應(yīng)的有unshift方法,表示從首部添加元素:

irb(main):029:0> x.unshift(0)
=> [0, 2, 1, 4, 5]


數(shù)組的insert方法可以在指定位置插入元素:

irb(main):053:0> x
=> [1, 2, 3]

irb(main):054:0> x.insert(1,5)
=> [1, 5, 2, 3]


當(dāng)然delete和delete_at方法可以刪除對(duì)應(yīng)的元素。
delete_at的參數(shù)是數(shù)組索引:

irb(main):021:0> x.delete_at(1)
=> 5



5. 數(shù)組的加減操作?

ruby很靈活,任何目標(biāo)都可以定義自己的方法。
數(shù)組就定義了加減方法(當(dāng)然還有乘除,不過(guò)很少使用)。

irb(main):031:0* x = [1,2,3]
=> [1, 2, 3]

irb(main):032:0> y = [4,5,6]
=> [4, 5, 6]

irb(main):033:0> z = x + y
=> [1, 2, 3, 4, 5, 6]

irb(main):034:0> z - x
=> [4, 5, 6]


所謂加就是把兩個(gè)數(shù)組合并起來(lái),所謂減就是把相同的元素排除掉。
而且這個(gè)減似乎不在意元素順序:

irb(main):043:0> x
=> [1, 2, 3]

irb(main):044:0> a
=> [3, 2, 1]

irb(main):045:0> x-a
=> []



6. 求唯一數(shù)組?

在ruby里這個(gè)很方便,用uniq方法:

irb(main):046:0> x = [1,2,3,3,2,1]
=> [1, 2, 3, 3, 2, 1]

irb(main):047:0> x.uniq
=> [1, 2, 3]


當(dāng)然x.uniq!這樣加個(gè)嘆號(hào),表示毀壞性方法,不返回而是直接改變x目標(biāo)自身。


7. 數(shù)組的比較?

可以直接用==進(jìn)行比較:

irb(main):048:0> x = [1,2,3]
=> [1, 2, 3]

irb(main):049:0> y = [3,2,1]
=> [3, 2, 1]

irb(main):050:0> x == y
=> false

irb(main):051:0> a = [1,2,3]
=> [1, 2, 3]

irb(main):052:0> x == a
=> true



8. 數(shù)組的類(lèi)型轉(zhuǎn)換?

數(shù)組可以轉(zhuǎn)換成串,使用to_s或者join方法:

irb(main):001:0> x=[1,2,3,4]
=> [1, 2, 3, 4]

irb(main):002:0> x.to_s
=> "1234"

irb(main):003:0> x.join "-"
=> "1-2-3-4"


串也可以轉(zhuǎn)換成數(shù)組:

irb(main):012:0> str="1 2 3 4"
=> "1 2 3 4"

irb(main):013:0> str.to_a
=> ["1 2 3 4"]


這可能不是你想要的,那么執(zhí)行:

irb(main):018:0> str.split(/ /).map {|s| s.to_i}
=> [1, 2, 3, 4]


Hash可以直接轉(zhuǎn)換成二維數(shù)組:

irb(main):010:0> hash={1=>2,3=>4}
=> {1=>2, 3=>4}

irb(main):011:0> hash.to_a
=> [[1, 2], [3, 4]]


數(shù)組可以轉(zhuǎn)換成hash,見(jiàn)我前一篇帖子。


9. 如何查找數(shù)組元素?

irb(main):034:0> x = [3,2,1,4,4]
=> [3, 2, 1, 4, 4]

irb(main):032:0> x.include? 4
=> true

irb(main):035:0> x.find do |s| s == 4 end
=> 4

irb(main):036:0> x.select do |s| s == 4 end
=> [4, 4]


include?判斷是否包含該元素,返回true或false。
find找出符合條件的一個(gè)元素,返回該元素。
select找出符合條件的所有元素,返回結(jié)果也是數(shù)組。


10. 數(shù)組的排序?

使用sort:

irb(main):049:0> x = [3,1,4,0,1]
=> [3, 1, 4, 0, 1]

irb(main):050:0> x.sort
=> [0, 1, 1, 3, 4]

irb(main):052:0> x.sort.reverse
=> [4, 3, 1, 1, 0]


還有sort_by方法,接受一個(gè)block作為參數(shù),按照指定規(guī)則進(jìn)行排序。


11. 其他實(shí)用數(shù)組方法?

展開(kāi)數(shù)組:

irb(main):025:0> x = [1,2,3,[0,1,2]]
=> [1, 2, 3, [0, 1, 2]]

irb(main):026:0> x.flatten
=> [1, 2, 3, 0, 1, 2]


清空數(shù)組:

irb(main):027:0> x.clear
=> []


替換數(shù)組:

irb(main):028:0> x.replace [3,2,1]
=> [3, 2, 1]


合并數(shù)組:

irb(main):030:0> x.concat [1,2,3]
=> [3, 2, 1, 1, 2, 3]



12. 數(shù)組的inject方法?

irb(main):044:0> x = [1,2,3,4]
=> [1, 2, 3, 4]

irb(main):045:0> x.inject(0){|sum, item| sum += item}  
=> 10


inject的參數(shù)0表示初始化sum,item表示遍歷每一個(gè)元素,在block里不斷自加,最后返回累計(jì)加值。

irb(main):047:0> x.inject([]){|new, item| new << -item}   
=> [-1, -2, -3, -4]


上述inject作用,表示取數(shù)組的每個(gè)元素的負(fù)值,返回一個(gè)新數(shù)組。當(dāng)然用map更簡(jiǎn)潔:

irb(main):048:0> x.map {|item| -item}
=> [-1, -2, -3, -4]


map的item也表示遍歷數(shù)組元素,對(duì)元素進(jìn)行計(jì)算后,返回一個(gè)結(jié)果數(shù)組。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-12-07 12:24 |只看該作者
嘿嘿嘿嘿,支持祖兒。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-12-07 14:23 |只看該作者
贊!不過(guò)一般都稱(chēng) object 為對(duì)象而非”目標(biāo)“的吧?
我還想到一個(gè):

  1. # 求交集
  2. ruby-1.9.2-head > [1,2,3] & [2,3,4]
  3. => [2, 3]
  4. # 求并集
  5. ruby-1.9.2-head > [1,2,3] | [2,3,4]
  6. => [1, 2, 3, 4]
復(fù)制代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-02-22 19:15 |只看該作者
學(xué)習(xí)了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-02-22 19:16 |只看該作者
  1. 挺好,呵呵
復(fù)制代碼

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-08-02 23:09 |只看該作者
學(xué)習(xí)了。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-08-14 11:14 |只看該作者
祖兒好久沒(méi)見(jiàn)到。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2011-08-16 20:05 |只看該作者
祖兒好久沒(méi)見(jiàn)到。
2gua 發(fā)表于 2011-08-14 11:14



    最近忙東忙西,用Java去了。fk領(lǐng)導(dǎo)。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2011-08-18 22:36 |只看該作者
回復(fù) 8# zuerrong


    哦?我也是Java出身咯。

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2011-11-17 03:54 |只看該作者
學(xué)習(xí)數(shù)組。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP