编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   
 [eiffel]阵列和字典教程
指数 -> 一般编程
查看上一个主题 可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
WTD.




邮政发布: 星期二02,2004 10:57 PM  帖子主题:[eiffel]阵列和字典教程

埃菲尔铁斯阵列

与C ++或Java中的那些相比,埃菲尔的阵列非常强大。与其中任何一种语言中的数组不同,埃菲尔的数组是一个与所有其他对象相同的第一类对象,并且不需要特殊语法。

在C ++和Java中,数组的大小是确定的。阵列不能超出他们的初始大小。在C ++编译程序时,在编译程序时设置大小,而Java的阵列在程序运行时将其尺寸设置为尺寸,但最终此处是它们无法生长的问题。

java.的阵列具有了解自己的长度的兑换质量,与C ++不同,这需要在单独的变量中监视长度。两者都提供围绕这些限制的类,但这些也有局限性,并且意味着必须知道至少两种不同类型的集合来做同样的事情。

但我挖掘,让我们看看eiffel类测试_prick,标准制作例程。在此,首先,我们将声明并初始化一个整数的整数数组,其中包含10个插槽,为整数,基本索引为零。

代码:
class test_program.
创建
   make
功能{任何}
   make is
      local
         my_array : ARRAY[INTEGER]
         base_capacity : INTEGER is 10
         base_index : INTEGER is 0
      do
         创建my_array.with_capacity.(base_capacity,base_index.)
      end
结尾


那简单。现在,如果我想在索引3到42处设置值,并且索引5到2的值:

代码:

class test_program.
创建
   make
功能{任何}
   make is
      local
         my_array : ARRAY[INTEGER]
         base_capacity : INTEGER is 10
         base_index : INTEGER is 0
      do
         创建my_array.with_capacity.(base_capacity,base_index.)
         
         my_array.put(42, 3)
         my_array.put(2, 5)
      end
结尾


现在我想放在索引4,乘以索引3的结果和my_array的索引5。这将展示@运算符如何在数组类中过载。

代码:

class test_program.
创建
   make
功能{任何}
   make is
      local
         my_array : ARRAY[INTEGER]
         base_capacity : INTEGER is 10
         base_index : INTEGER is 0
      do
         创建my_array.with_capacity.(base_capacity,base_index.)
         
         my_array.put(42, 3)
         my_array.put(2, 5)
         my_array.put((my_array @ 3) * (my_array @ 5), 4)
      end
结尾


现在,我们希望通过我们创建和打印每个项目到标准输出的数组来迭代。

代码:

class test_program.
创建
   make
功能{任何}
   make is
      local
         my_array : ARRAY[INTEGER]
         base_capacity : INTEGER is 10
         base_index : INTEGER is 0
         
         iter : ITERATOR[INTEGER]
      do
         创建my_array.with_capacity.(base_capacity,base_index.)
         
         my_array.put(42, 3)
         my_array.put(2, 5)
         my_array.put((my_array @ 3) * (my_array @ 5), 4)
         
         from
            iter := my_array.get_new_iterator.
            iter.start
         until
            iter.is_off
         loop
           std_output.put_integer.(iter.item)
           std_output.put_new_line..
         end
      end
结尾


漂亮的光滑,呃?不必跟踪索引和循环从0到9循环,从my_array输出10项。

词典

现在,有时阵列实际上是一种令人难以追踪数据的克利所的方法。毕竟,像0,3和57一样的键并不是非常描述的。我们需要像字典那样的东西。哦,等,我们有一个......

代码:

class test_program.
创建
   make
功能{任何}
   make is
      local
         my_dict :字典[string,string]
      do
         create my_dict.make
         
         my_dict.put("My Name", "John Doe")
         my_dict.put("My Dog", "Fluffy")
         my_dict.put("My Car", "80s Civic)
         
         std_output.put_string.("My name is: " + (my_dict @ "My Name"))
         std_output.put_new_line.
      end
结尾


不再需要记住与“我的名字”关联的数组索引,只需使用该字符串访问...嗯...我的名字。漂亮,不是吗?
赞助
赞助
赞助
赞助
短发




邮政发布: 2004年3月3日星期三下午5:47  帖子主题:(没有主题)

抱歉抱怨事物,但在这个论坛的粘性中尚未说这个部分是为了 编程不是一定的语言,它的意思是罪恶的东西和棕褐色线程,游戏物理线程,你有点把它变成了一个小的rugy和艾菲尔论坛,
乔恩斯




邮政发布: 2004年3月3日星期三8:14  帖子主题:(没有主题)

有些东西搞砸了这个线程的布局
WTD.




邮政发布: 2004年3月3日星期三下午4:13  帖子主题:(没有主题)

Methinks PhPBB的版本本论坛正在使用时需要修补,因为它有问题在帖子中处理超过两个代码标签。这发生在我盯着这个论坛的另一个线程中。
amailer.




邮政发布: 2004年3月3日星期三下午6:15  帖子主题:(没有主题)

哦,男人,丹更好地修复他的bbcode ...





邮政发布: 星期四04,2004 6:12 PM  帖子主题:(没有主题)

我可以,但是我们永远不会看到这个有趣的东西,哈哈。

雅,如果我有一天在某些核心中有一个测试,可能会有时间。
计算机科学加拿大 帮助在C,C ++,Java,PHP,Ruby,图灵,VB等内容中进行编程!
LJR1981




邮政发布: 2014年1月15日星期三下午3:30  帖子主题:Re:[eiffel]阵列和字典教程

不时,一个人想要在eiffel中创建多维数组。典型答案需要要求程序员创建阵列[array [Any]],其中嵌入式阵列泛型的每个“级别”被保持为阵列的“维度”。因此,阵列[阵列[ANY]]将被要求保护为二维阵列。虽然有一个Array2 [G]类,但没有Array3或Array4。

该怎么办?

现在我们需要n维数组:Arrayn [g - >任何]。您可以阅读对此类的讨论并在此处获取代码 www.eiffelroom.org. website.

Arrayn类相当简单。在简单的线性阵列中,它存储N维数组元素或项目:



代码:

功能{无} - 实现
 
        internal_items: ARRAY [ANY]
                        - 内部存储当前物品。




此内部项目数组不会导出(例如,不是“公共”)。相反,对数组的访问由呼叫处理:



代码:

l_array_item.:= my_array.item (<<3,6,7>>)




在上面的示例中,通过对Arrayn的“项目”特征的调用来执行数组访问。传递的是被称为“清单阵列”(例如,用双角括号括起来的物品<< and >>)。因此,呼叫项目(<<3,6,7>>)告诉我们,阵列是三维阵列,我们在位于3,6,7(x,y和z)的元素之后。

将物品放入阵列中同样直接:



代码:

my_array.put.put.put..put.put..put.put. (l_item, <<6,4,1>>




上面的示例将Item` L_Item'放在元素6,4,1的三维阵列中。

如果您检查了Arrayn类的代码,则会发现从Internal_Items获取项目,由“合同”控制 - 即 - 如果数组定义为3维界限,并且您尝试发送My_Array.put (L_ITEM,<<1,2,3,4>>)(例如,4维值而不是3),您的呼叫将在“PUT”功能的确保中导致合同失败:



代码:

        put (a_object: G; a_vector: ARRAY [INTEGER])
                        - 将“对象”放在“索引”
                require
                        is_valid_vector: is_valid_vector (a_vector)




`is_valid_vector'功能是:



代码:

        is_valid_vector (a_vector: ARRAY [INTEGER]): BOOLEAN
                        - 基于“界限”是“A_Vector”有效吗?
                do
                        Result := a_vector.count <= dimensions
                        Result :=结果和跨A_Vector作为IC_Vector
                                                        all
                                                                ic_vector.item >=界限[ic_vector.cursor_index] .lower_nb和
                                                                ic_vector.item <=界限[ic_vector.cursor_index] .upper_nb
                                                        end
                        Result :=结果和位置(a_vector) <= max_size
                end




上面的代码简单地说:确保“A_Vector”中的向量计数匹配阵列的尺寸,并且清单数组中的每个边界值都在存储在“界限”组元组数组中的边界内。检查界限功能将告诉您:



代码:

        bounds:array [tuple [delight_nb,upper_nb: INTEGER]]
                        - 电流的下限和上限。


从上一个显示帖子:   
   指数 -> 一般编程
查看上一个主题 告诉一个朋友可打印的版本下载主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 7 Posts ]
跳到:   


Style:  
搜索: