For loop 具有带有值的列表。如果项目存在多次,是否增加价值?

For loop 具有带有值的列表。如果项目存在多次,是否增加价值?,for-loop,clips,counting-sort,For Loop,Clips,Counting Sort,我想从剪辑开始,尝试实现一个非常简单的任务: Item1 = 5 Item2 = 7 Item3 = 8 Item1 = 10 假设我有上面的变量或赋值。现在我需要一个脚本来将具有最小值的项目排序为最大值。此外,具有相同名称(项目1)的项目应汇总其值 已经在其他语言中意识到了这一点,但我完全沉浸在剪辑中 NewList= {Item2=7,Item3=8,Item1=15} 嗨,我认为在这样的情况下,悬赏是不合适的。你可以删除这一行并添加一些细节。好的,我删除了这一行,但我希望这一问题是不言

我想从剪辑开始,尝试实现一个非常简单的任务:

Item1 = 5
Item2 = 7
Item3 = 8
Item1 = 10
假设我有上面的变量或赋值。现在我需要一个脚本来将具有最小值的项目排序为最大值。此外,具有相同名称(项目1)的项目应汇总其值

已经在其他语言中意识到了这一点,但我完全沉浸在剪辑中

NewList= {Item2=7,Item3=8,Item1=15}

嗨,我认为在这样的情况下,悬赏是不合适的。你可以删除这一行并添加一些细节。好的,我删除了这一行,但我希望这一问题是不言自明的。例如,我有一些数据,比如:Apple=3.5香蕉=5苹果=4.5期望的输出是:{Banana=5},{Apple=8}您正在搜索的是一个字典一个自定义添加函数,用于检查添加的键是否已经有值,如果已经有值,则将两者相加。如果编程语言中不存在dict,则需要创建自己的数据结构以用于类似用途。如果您的意思是,则在中未提及字典数据类型。我可以在Python或类似语言中添加示例代码,但正如您编写的那样,您已经知道如何在其他语言中执行此操作,我认为这对您没有帮助。这非常有效!非常感谢你。非常感谢您的时间。是否可以使用for循环以便方便地插入新的数据对?例如,我想将存储在某个多字段中的每个数据对发送给[d1],而不是(发送[d1]添加项3 8)?谢谢是的,如果您将键分配给一个多字段变量,并将值分配给另一个多字段变量,您可以使用类似(循环计数(?i 1(长度$?键))(println(n次$?i?键)”=“(n次$?i?值)),其中println调用将替换为将每个键/值添加到字典中的调用。
CLIPS> 
(defclass ENTRY
   (is-a USER)
   (slot key)
   (slot value))
CLIPS>    
(defclass DICTIONARY
   (is-a USER)
   (multislot entries))
CLIPS> 
(defmessage-handler DICTIONARY find-key-position (?key)
   (bind ?index 1)
   (foreach ?e ?self:entries
      (if (eq (send ?e get-key) ?key)
         then
         (return ?index))
      (bind ?index (+ ?index 1)))
   (return FALSE))
CLIPS> 
(defmessage-handler DICTIONARY add (?key ?value)
   (bind ?position 
      (send ?self find-key-position ?key))
   (if ?position
      then
      (bind ?entry (nth$ ?position ?self:entries))
      (send ?entry put-value (+ (send ?entry get-value) ?value))
      else
      (bind ?position (+ (length$ ?self:entries) 1))
      (bind ?entry
         (make-instance of ENTRY (key ?key) (value ?value)))
      (slot-direct-insert$ entries ?position ?entry)))
CLIPS>    
(defmessage-handler DICTIONARY display ()
   (printout t "{")
   (foreach ?e ?self:entries
      (printout t " " (send ?e get-key) "=" (send ?e get-value)))
   (printout t " }" crlf))
CLIPS>    
(deffunction sort-by-value (?e1 ?e2)
   (> (send ?e1 get-value) (send ?e2 get-value)))
CLIPS>    
(defmessage-handler DICTIONARY sort ()
   (bind ?self:entries (sort sort-by-value ?self:entries))
   TRUE)
CLIPS> (make-instance d1 of DICTIONARY)
[d1]
CLIPS> (send [d1] display)
{ }
CLIPS> (send [d1] add item1 5)
TRUE
CLIPS> (send [d1] add item2 7)
TRUE
CLIPS> (send [d1] add item3 8)
TRUE
CLIPS> (send [d1] display)
{ item1=5 item2=7 item3=8 }
CLIPS> (send [d1] add item1 10)
15
CLIPS> (send [d1] display)
{ item1=15 item2=7 item3=8 }
CLIPS> (send [d1] sort)
TRUE
CLIPS> (send [d1] display)
{ item2=7 item3=8 item1=15 }
CLIPS>