這只是一個假設的問題,如果你沒有Array
和Hash
類,是否有任何方式在純Ruby中實現Array類?怎麼樣?數組可以在Ruby中重新創建嗎?
8
A
回答
11
是的,我們可以!
class MyArray
include Enumerable
def initialize
@size = 0
end
def <<(val)
instance_variable_set("@a#{@size}".to_sym, val)
@size += 1
end
def [](n)
instance_variable_get("@a#{n}")
end
def length
@size
end
def each
0.upto(@size - 1) { |n| yield self[n] }
end
end
a = MyArray.new
a << 1
a << 2
p a.to_a #=> [1,2]
這通過在對象上創建實例變量@ A0,A1 @等來表示數組的下標0,1,...等,具有恆定時間長度和索引操作。其餘的操作(刪除等)實施起來要多一點努力,但這絕對有可能。
請注意,索引操作的常量時間屬性取決於基礎Ruby運行時使用實例變量的適當數據結構。
3
您可以使用鏈接列表,這將是可怕的低效率,但可能。你也可以使用二叉樹(見上面的評論)。
我想,我的觀點是:如果沒有較低級別的語言支持,您無法獲得體面的陣列。我假設在Ruby數組中使用的基本結構是一個C數組(儘管我可能是錯的)。有了這樣一個基本類型,低層次的支持對於任何地方的體面表現都至關重要。
+0
沒想過。有趣:) – Geo
2
0
當然可以。 Ruby是一種圖靈完整語言。你可以實現的一切,你可以在中實現任何語言在Ruby中。
相關問題
- 1. Android:AsyncTask可以重新創建嗎?
- 2. 可以在CakePHP中重新創建以下MySQL查詢嗎?
- 3. 我可以在Ruby中使用循環構建數組嗎?
- 4. 我可以在Dagger2中重新創建託管依賴項嗎?
- 5. 我們可以在C++中創建一組數組嗎?
- 6. 在ruby中重新創建.sort
- 7. php - 重新創建數組?
- 8. 我可以在JavaScript中創建自己的數組對象嗎?
- 9. 在java中創建數組時可以省略rowsize嗎?
- 10. 我可以使用指針在Fortran中創建子數組嗎?
- 11. 我們可以在c#.Net中創建哈希表數組嗎?
- 12. 我可以在C中創建一個Char指針數組嗎?
- 13. 可以在vala中創建混合數組嗎?
- 14. 您可以在NetBeans中創建一個JTextFields數組嗎?
- 15. 可以在Paint函數中創建新筆嗎?
- 16. ruby數組可以each_with_index做步嗎?
- 17. Ruby可以讀取在VB.NET中創建的.dat文件嗎?
- 18. 我可以在Ruby中創建替代括號嗎?
- 19. 創建沒有新行的數組,RUBY
- 20. 可以在新的C++ 11中創建可選的引用嗎?
- 21. 我可以避免在Ruby on Rails中轉換數組嗎?
- 22. 我可以創建一個列表模型到數組中嗎?
- 23. 可以在delphi中創建Web Bot嗎?
- 24. 我可以在Ajax中創建EL嗎?
- 25. 當surfaceview被重新創建時,mediaplayer可以重新啓動嗎? (Android)
- 26. 在AngularJS中創建可重用組件
- 27. 遍歷數組以在ruby中創建變量
- 28. Ruby動態創建數組
- 29. 我們可以在enum中創建組嗎?
- 30. 我可以在SSAS中創建新的計算成員嗎?
我認爲這是最紅寶石般的解決方案。 – Geo